package com.shycloud.mido.organ.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.shycloud.mido.organ.api.dto.OrganizationDTO;
import com.shycloud.mido.organ.api.dto.StaffDetailedDTO;
import com.shycloud.mido.organ.api.entity.StaffDetailed;
import com.shycloud.mido.organ.api.entity.StaffSchool;
import com.shycloud.mido.organ.api.entity.SysUserRole;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * 员工表
 *
 * @author danZ
 * @date 2019/6/4
 */
@Mapper
@Component
public interface StaffDetailedMapper extends BaseMapper<StaffDetailed> {

	/**
	 * 获取员工列表
	 * @param page 分页对象
	 * @param staffDetailed 员工DTO
	 * @return  StaffDetailedDTO
	 */
	IPage<StaffDetailedDTO> getStaffDetailedPage(IPage<StaffDetailedDTO> page, @Param("query") StaffDetailedDTO staffDetailed);

	/**
	 *  新增员工信息
	 * @param staffDetailed 员工DTO
	 */
	void addStaffDetailed(StaffDetailedDTO staffDetailed);

	/**
	 * 新增员工所属学校
	 * @param school 员工所属学校实体
	 * @return int
	 */
	int addStaffSchool(StaffSchool school);

	/**
	 * 新增员工角色
	 * @param role 员工角色实体
	 * @return int
	 */
	int addUserRole(SysUserRole role);

	/**
	 *  编辑员工信息
	 * @param staffDetailed 员工表实体
	 * @return int
	 */
	int updateStaffDetailed(StaffDetailed staffDetailed);

	/**
	 *  查询member_id
	 * @param id id
	 * @return String
	 */
	String queryMemberId(String id);

	/**
	 * 根据id 删除org_staff_school数据
	 * @param staffDetailedDTO 员工所属学校DTO
	 * @return int
	 */
	int deleteStaffSchool(StaffDetailedDTO staffDetailedDTO);

	/**
	 * 通过id删除org_sys_user_role数据
	 * @param staffDetailedDTO 员工所属学校DTO
	 * @return int
	 */
	int deleteUserRole(StaffDetailedDTO staffDetailedDTO);

	/**
	 * 通过id 离职
	 * @param staffDetailed 员工表实体
	 * @return int
	 */
	int updateWorkStatus(StaffDetailed staffDetailed);

	/**
	 * 根据memberId 查询所在机构
	 * @param staff 员工表实体
	 * @return list
	 */
	List<OrganizationDTO> queryStaffOrganization(StaffDetailed staff);

	/**
	 * 根据memberId和机构code查询所在机构
	 * @param staff 员工表实体
	 * @return list
	 */
	List<Map<String,Object>> queryOrganization(StaffDetailed staff);

	/**
	 * 根据memberId和orgId获取staff_detailed表是否存在数据
	 * @param staff 详情表实体
	 * @return int
	 */
	int queryStaffDetailedCount(StaffDetailed staff);

	/**
	 * 根据手机号获取员工信息
	 * @param memberId memberId
	 * @param orgId 机构Id
	 * @return StaffDetailedDTO
	 */
	StaffDetailedDTO getInfoByPhone(@Param("memberId") String memberId, @Param("orgId") Integer orgId);
}
